在討論伺服器(Server)之前,先了解「代理(Proxy)」的概念是非常有幫助的。代理可分為 正向代理(Forward Proxy) 與 反向代理(Reverse Proxy),兩者的角色與應用場景不同。
正向代理就像是使用者端與伺服器之間的中介。使用者先將請求送給代理伺服器,再由它幫我們向真正的目標伺服器發送請求。
在我參加轉職培訓班時,曾使用 Apache Tomcat 搭配 Java Servlet 架構處理請求。
Tomcat 本身是一種 Web Server,能夠:
反向代理則是在 用戶與實際伺服器中間的保護層。用戶的請求先到達反向代理伺服器,再由它轉送給內部的實際應用服務。
目前我在公司的專案中,反向代理角色通常由 NGINX 擔任。它負責先接收來自外部的請求,並根據請求類型判斷要交給哪個內部服務處理。
例如:
若是 PHP 請求,就轉交給 php-fpm 去處理。
與培訓班中直接啟動 Tomcat 不同,現在的開發環境已經透過 Docker 將服務容器化,更加靈活。
我們會使用 docker-compose.yml 來設定與協調多個 container(例如 NGINX 與 Laravel/PHP-FPM)之間的溝通與啟動。
services:
nginx:
container_name: demo-nginx_local # 自訂 Container 名稱
image: nginx:mainline-alpine # 使用的官方 NGINX 映像檔
ports:
- '8800:8080' # 外部 port: 容器內部 port
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf # 將本機的 nginx 設定掛載到容器中
networks:
- backend-local # 所屬的 Docker 網路
depends_on:
- php # 啟動 nginx 前,需先啟動 php container
backend-local 是我們自定義的網路名稱,讓 nginx 與 php 兩個 container 能夠彼此溝通。
Docker 預設 container 之間是隔離的,因此需要明確指定同一個網路。
表示 nginx 在啟動之前,會先確保 php container 已經啟動完成,避免 NGINX 啟動時找不到 PHP 服務。
完成設定後,我們只需要執行以下指令即可啟動整個開發環境:
docker compose up -d
這樣就會在背景中啟動所有 container,並依照設定自動連接、綁定 port 與路徑。